iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
SideProject30

出遊不怕一個人系列 第 28

DAY28-會員中心(會員頭貼上傳)

  • 分享至 

  • xImage
  •  

有了會員照片的url後,下一步就是要更新到會員資料庫裡面,更新資料的方式是使用到updateProfile的功能。

onSubmit裡面多加了一個判斷,假如使用者沒有上傳圖片的話就不更新會員資料,有的話才將圖片url傳入資料裡面。

import { updateProfile } from "firebase/auth";
function Member(){
    const user = auth.currentUser
    const [photoURL,setPhotoURL] = useState(null)
    const [imageUpload, setImageUpload] = useState(null)
    const previewImg = imageUpload? URL.createObjectURL(imageUpload) : ""
    function onSubmit(){
        if(previewImg){
            const imagesRef = ref(storage, 'user-images/' + user.uid);
            const metadata = {
                contentType: imageUpload.type,
            };
            uploadBytes(imagesRef, imageUpload,metadata).then((snapshot) => {
                return getDownloadURL(snapshot.ref)
            }).then((url)=>{
                setPhotoURL(url)
            });
            updateProfile(user, {
                photoURL
            })
        }
    }
    return (
				//略
				<div className="imgwrap">
            <img src={user.photoURL&&previewImg?previewImg:user.photoURL} alt=""/>
        </div>
        <div className="editbtnwrap">
            <label className="btn_edit" htmlFor="upload" >上傳照片</label>
            <input type="file" accept="image/*" id="upload" 
                onChange={(e)=>setImageUpload(e.target.files[0])}
            />
        </div>
                   
    )
}
export default Member

這邊比較會有問題的地方是判斷使用者是否有圖片並依狀態顯示不同的照片,有以下兩個狀況 :

  1. 已有頭像,想再換新的頭像
  2. 無頭像,想新增頭像

第一種狀況必須是user.photoURL和previewImg都有的時候,在點擊上傳後畫面要顯示他上傳的照片previewImg;第二種相對單純,只要有上傳就顯示previewImg,所以在img上面寫了這樣的判斷式src={user.photoURL&&previewImg?previewImg:user.photoURL}
https://ithelp.ithome.com.tw/upload/images/20231008/20140300XFX1xOplJQ.png


上一篇
DAY27-會員中心(更新會員頭貼)
下一篇
DAY29-會員中心(更新名稱與密碼)
系列文
出遊不怕一個人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言